链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/
题目描述
题目分析
这是一道比较简单的递归的问题,首先我们分析一下递归结构,如下图
通过这样的一个图示也能够很清晰的看出其递归结构结构为:
其中w是从当前的字母列表中任选一个。
然后确定递归参数。
我们需要:
- digits:
- result:最终结果
- step:前n-1次合成的字符串
- n:第n次
最后确定递归边界:
递归边界为当n == len(n)
,代表结束。
递归算法时间复杂度分析
假设每个数字对应3个字母,那么大致复杂度为$3^n$,等价于复杂度规模为$O(2^n)$。
总结
这种递归的方式实际上就是回溯法,回溯法实际上也是一种暴力解法,和多重循环一样。而这里由于不知道到底会有多少个数字,也就是长度是不定的,所以不能够用多重循环来求解。
回溯法非常重要,虽然他的效率不高,但是后续的很多算法都是在它的基础上演进的,比如使用各种剪枝的方法,比如动态规划等等。
答案
1 | class Solution: |